#ifndef NODO_H
#define NODO_H

#include <iostream>
using namespace std;

template< class T > class DiccTrie;

template< class T >
class Nodo { 

friend class DiccTrie< T >;  

public:
	Nodo();
	bool esHoja() const;
	T dameValor() const;
	bool esLetra( const char & ) const;
	void imprimir() const;

private:
	bool hoja;
	T *valor;
	Nodo< T > *letras[27];

};

template< class T >
Nodo<T> :: Nodo(){ 
	valor = NULL;
	hoja = false;
	int i = 0;
	while( i < 27 ){
		letras[i] = NULL;
		i++;
	}
}

template< class T >
bool Nodo<T>::esHoja() const{
	return hoja;
}

template< class T >
T Nodo<T>::dameValor() const{
	if (!this->esHoja())	
		cerr << "El nodo no es una hoja, no tiene valor definido.";
	else
		return *valor;
}

template< class T >
bool Nodo<T>::esLetra( const char & c ) const{
	int indice = (int) c - 97;

	return ( letras[indice] != NULL);
}

template< class T >
void Nodo<T>::imprimir()const{
 	if (valor == NULL) cout << "Valor Nulo" << endl;
 	else cout << "Significado es: " << *valor;
 	
 	if (!esHoja()) cout << "No es Hoja" << endl;
 	else cout << "Es Hoja"<< endl;
 	
 	for(int i = 0; i < 27; i++){
 		if (letras[i]==NULL) {
 			cout << "NULL ";
 		}
 		else{
 			cout << "ocupado indice: " << i;
 		}
 	}
	cout << endl;
}
#endif
